package com.example.demo.tenant;

import com.alibaba.druid.pool.DruidDataSource;
import com.example.demo.dto.TenantDbConfigDTO;
import lombok.extern.slf4j.Slf4j;

import javax.sql.DataSource;

/**
 * 　* @description: DataSource配置类
 */
@Slf4j
public class DataSourceUtils {

    public static DataSource wrapperDataSource(TenantDbConfigDTO tenant) {

        DruidDataSource dataSource = new DruidDataSource();

        String tenantConnectionPoolName = tenant.getTenantId() + "-connection-pool";
        dataSource.setName(tenantConnectionPoolName);

        dataSource.setUrl(tenant.getUrl());
        dataSource.setUsername(tenant.getUsername());
        dataSource.setPassword(tenant.getPassword());
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        // 配置获取连接等待超时的时间
        dataSource.setMaxWait(20000);
        // 配置初始化大小、最小、最大
        dataSource.setMaxActive(50);
        dataSource.setMinIdle(1);
        dataSource.setInitialSize(1);
        // 配置一个连接在池中最小生存的时间，单位是毫秒
        dataSource.setMinEvictableIdleTimeMillis(300000);
        // 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒
        dataSource.setTimeBetweenConnectErrorMillis(60000);
        // 用Oracle，则把poolPreparedStatements配置为true，mysql可以配置为false。分库分表较多的数据库，建议配置为false。
        dataSource.setPoolPreparedStatements(false);
        return dataSource;
    }

}
